1. От сложения к умножению
В теоретических рамках линейные преобразования и сдвиги (аффинные отображения) часто рассматриваются отдельно. Однако высокопроизводительные библиотеки, такие как BLAS (базовые подпрограммы линейной алгебры) специально оптимизированы для операций с векторами-матрицами и матрицами-матрицами. Чтобы использовать эти ядра, мы выражаем все операции в виде:
$$T(v) = Av$$
2. Гомогенные координаты
Чтобы реализовать сдвиг в $\mathbf{R}^n$, используя матрицу, мы расширяем пространство до $\mathbf{R}^{n+1}$. Вектор $[x, y, z]^T$ становится $[x, y, z, 1]^T$. Этот «дополнительный 1» позволяет закодировать сдвиг в последнем столбце матрицы $(n+1) \times (n+1)$.
Сдвиг на $v_0 = [t_x, t_y, t_z]^T$ представляется матрицей:
$$A = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix}$$
Числа $0, 0, 0, 1$ в последней строке играют решающую роль. Когда матрица $A$ умножается на вектор, у которого последний компонент равен $1$, результатом будет:
$(0 \cdot x) + (0 \cdot y) + (0 \cdot z) + (1 \cdot 1) = 1$
Это гарантирует сохранение «аффинной» природы данных, позволяя выполнять последовательные операции без потери целостности системы координат.
3. Стандарты реализации: BLAS
Численная эффективность зависит от стандартизированных подпрограмм. BLAS предоставляет три уровня операций:
- Уровень 1: Операции с векторами (например, скалярные произведения).
- Уровень 2: Операции с матрицей-вектором ($Ax+b$).
- Уровень 3: Операции с матрицами ($AB+C$), которые наиболее плотны по вычислениям и эффективны с точки зрения аппаратного обеспечения.